VPC Endpoint를 생성한 다음, 특정 RunCommand가 실패할 시 해결 방법
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 VPC Endpoint를 생성한 다음, 특정 RunCommand가 실패할 시 해결하는 방법에 대해서 정리해 봤습니다.
문제 발생
현재 Private Subnet에 EC2 Instance를 생성하고, SSM 접속을 위해 아래 3가지 서비스의 엔드포인트를 생성하고 있습니다.
- com.amazonaws.ap-northeast-1.ssm
- com.amazonaws.ap-northeast-1.ssmmessages
- com.amazonaws.ap-northeast-1.ec2messages
엔드포인트를 통해 SSM으로 접속할 수 있는 상황입니다.
그렇다면 RunCommand를 실행 시켜봅시다.
AWS-UpdateSSMAgent라는 SSM을 업데이트 시키는 명령어를 선택합니다.
「수동으로 인스턴스 선택」을 클릭하고, AWS-UpdateSSMAgent를 실행할 EC2 Instance를 선택한 다음 RunCommand를 실행시킵니다.
그 외 AWS-UpdateSSMAgent에 관해서는 아래 링크를 참고해 주세요.
조금 기다려 보면 RunCommand 상태가 실패로 표시 되는 것을 확인할 수 있습니다.
문제 해결
failed to download file reliably, https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/ssm-agent-manifest.json, Get "https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/ssm-agent-manifest.json": dial tcp xx.xxx.xxx.xx:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
Error 내용을 살펴보면 다음과 같이 파일을 안정적으로 다운로드하지 못했다 라는 문구를 확인할 수 있습니다.
AWS 공식 문서를 살펴보면 다음과 같습니다.
다양한 Systems Manager 작업을 수행하는 과정에서 AWS Systems Manager Agent(SSM Agent)는 여러 Amazon Simple Storage Service(Amazon S3) 버킷에 액세스합니다.
그러나 Systems Manager 작업에서 Virtual Private Cloud(VPC) 엔드포인트를 사용하는 경우 Systems Manager를 위한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 프로파일 또는 하이브리드 환경의 인스턴스를 위한 서비스 역할에 명시적 권한을 제공해야 합니다. 그렇지 않을 경우, 리소스가 이러한 퍼블릭 버킷에 액세스할 수 없습니다.
VPC 엔드포인트를 사용할 때 관리형 노드에 이러한 버킷에 대한 액세스 권한을 부여하려면 사용자 정의 Amazon S3 권한 정책을 생성한 다음 인스턴스 프로파일(EC2 인스턴스의 경우) 또는 하이브리드 환경의 서비스 역할(AWS IoT Greengrass 코어 디바이스 및 온프레미스 서버, 엣지 디바이스, 및 가상 머신의 경우)에 이를 연결합니다.
자세한 내용은 아래 링크를 참고해 주세요.
이제 VPC Endpoint로 들어와서 s3 서비스를 생성합니다.
하지만 s3 서비스의 경우 아래와 같이 2가지 서비스가 존재합니다.
- Amazon S3용 게이트웨이 엔드포인트
- Amazon S3용 인터페이스 엔드포인트
Amazon S3용 게이트웨이 엔드포인트 | Amazon S3용 인터페이스 엔드포인트 |
---|---|
두 경우 모두, 네트워크 트래픽은 AWS 네트워크에 남아 있습니다. | |
Amazon S3 퍼블릭 IP 주소 사용 | VPC의 프라이빗 IP 주소를 사용하여 Amazon S3에 액세스 |
동일한 Amazon S3 DNS 이름 사용 | 엔드포인트별 Amazon S3 DNS 이름 필요 |
온프레미스에서의 액세스 허용하지 않음 | 온프레미스에서의 액세스 허용 |
다른 AWS 리전에서의 액세스를 허용하지 않음 | VPC 피어링 또는 AWS Transit Gateway를 사용하여 다른 AWS 리전의 VPC에서 액세스 허용 |
미청구 | 청구 |
자세한 사항은 아래 링크를 참고해 주세요.
이번 블로그에서는 Amazon S3용 게이트웨이 엔드포인트를 선택해서 생성합니다.
다시 RunCommand로 AWS-UpdateSSMAgent를 실행해 보면 성공적으로 명령어가 실행 된 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.